package controller

// 检查用户名格式
func (c *Controller) checkUsernameFormat(username string) bool {
	if len(username) > 20 || len(username) < 4 {
		return false
	}
	// 字母或数字
	for _, s := range username {
		if s >= '0' && s <= '9' {
			continue
		}
		if s >= 'A' && s <= 'Z' {
			continue
		}
		if s >= 'a' && s <= 'z' {
			continue
		}
		return false
	}
	return true
}

// 检查密码格式
func (c *Controller) checkPasswordFormat(password string) bool {
	if len(password) > 20 || len(password) < 6 {
		return false
	}
	number := false
	letter := false
	symbol := false
	// 必须包含大小写字母 数字 特殊符号
	for _, s := range password {
		if s >= '0' && s <= '9' {
			number = true
			continue
		}
		if (s >= 'A' && s <= 'Z') || (s >= 'a' && s <= 'z') {
			letter = true
			continue
		}
		symbol = true
	}
	if number && letter && symbol {
		return true
	}
	return false
}

// // 账号注册
// func (c *Controller) gmAccountReg(ctx *gin.Context) {
// 	req := new(model.GmAccountRegReq)
// 	err := ctx.ShouldBindJSON(req)
// 	if err != nil {
// 		logger.Error("parse json error: %v", err)
// 		ctx.JSON(http.StatusOK, ParamError)
// 		return
// 	}
// 	if !c.checkUsernameFormat(req.Username) {
// 		ctx.JSON(http.StatusOK, GmUsernameFormatError)
// 		return
// 	}
// 	if !c.checkPasswordFormat(req.Password) {
// 		ctx.JSON(http.StatusOK, GmPasswordFormatError)
// 		return
// 	}
// 	err = c.s.RegGmAccount(req.Username, req.Password)
// 	if err != nil {
// 		switch {
// 		case errors.Is(err, service.GmUsernameExist):
// 			ctx.JSON(http.StatusOK, GmUsernameExist)
// 			return
// 		default:
// 			logger.Error("create account error: %v", err)
// 			ctx.JSON(http.StatusOK, UnknownError)
// 			return
// 		}
// 	}
// 	ctx.JSON(http.StatusOK, Ok)
// }

// 账号登陆
// func (c *Controller) gmAccountLogin(ctx *gin.Context) {
// 	req := new(model.GmAccountLoginReq)
// 	err := ctx.ShouldBindJSON(req)
// 	if err != nil {
// 		logger.Error("parse json error: %v", err)
// 		ctx.JSON(http.StatusOK, ParamError)
// 		return
// 	}
// 	if !c.checkUsernameFormat(req.Username) {
// 		ctx.JSON(http.StatusOK, GmUsernameFormatError)
// 		return
// 	}
// 	if !c.checkPasswordFormat(req.Password) {
// 		ctx.JSON(http.StatusOK, GmPasswordFormatError)
// 		return
// 	}
// 	uid, token, err := c.s.GmAccountLogin(req.Username, req.Password)
// 	if err != nil {
// 		switch {
// 		case errors.Is(err, service.GmAccountNotExist):
// 			ctx.JSON(http.StatusOK, GmUsernameOrPasswordError)
// 			return
// 		case errors.Is(err, service.GmPasswordError):
// 			ctx.JSON(http.StatusOK, GmUsernameOrPasswordError)
// 			return
// 		default:
// 			logger.Error("account login error: %v", err)
// 			ctx.JSON(http.StatusOK, UnknownError)
// 			return
// 		}
// 	}
// 	ctx.JSON(http.StatusOK, &model.CommonRsp{Code: 0, Data: &model.GmAccountLoginRsp{Uid: uid, Token: token}})
// }

// // 获取信息
// func (c *Controller) gmAccountInfoGet(ctx *gin.Context) {
// 	uid := ctx.GetUint64("uid")
// 	if uid == 0 {
// 		logger.Error("uid not exist")
// 		ctx.JSON(http.StatusOK, UnknownError)
// 		return
// 	}
// 	accountInfo, err := c.s.GetGmAccountInfo(uint32(uid))
// 	if err != nil {
// 		logger.Error("get account info error: %v", err)
// 		ctx.JSON(http.StatusOK, UnknownError)
// 		return
// 	}
// 	ctx.JSON(http.StatusOK, &model.CommonRsp{Code: 0, Data: accountInfo})
// }

// // 修改信息
// func (c *Controller) gmAccountInfoUpdate(ctx *gin.Context) {
// 	uid := ctx.GetUint64("uid")
// 	if uid == 0 {
// 		logger.Error("uid not exist")
// 		ctx.JSON(http.StatusOK, UnknownError)
// 		return
// 	}
// 	req := new(model.GmAccountInfo)
// 	err := ctx.ShouldBindJSON(req)
// 	if err != nil {
// 		logger.Error("parse json error: %v", err)
// 		ctx.JSON(http.StatusOK, ParamError)
// 		return
// 	}
// 	if len(req.Nickname) > 32 {
// 		ctx.JSON(http.StatusOK, ParamError)
// 		return
// 	}
// 	err = c.s.UpdateGmAccountInfo(uint32(uid), req)
// 	if err != nil {
// 		logger.Error("update account info error: %v", err)
// 		ctx.JSON(http.StatusOK, UnknownError)
// 		return
// 	}
// 	ctx.JSON(http.StatusOK, Ok)
// }

// // 修改密码
// func (c *Controller) gmAccountPasswordChange(ctx *gin.Context) {
// 	uid := ctx.GetUint64("uid")
// 	if uid == 0 {
// 		logger.Error("uid not exist")
// 		ctx.JSON(http.StatusOK, UnknownError)
// 		return
// 	}
// 	req := new(model.GmAccountPasswordChangeReq)
// 	err := ctx.ShouldBindJSON(req)
// 	if err != nil {
// 		logger.Error("parse json error: %v", err)
// 		ctx.JSON(http.StatusOK, ParamError)
// 		return
// 	}
// 	if !c.checkPasswordFormat(req.OldPassword) {
// 		ctx.JSON(http.StatusOK, GmPasswordFormatError)
// 		return
// 	}
// 	if !c.checkPasswordFormat(req.NewPassword) {
// 		ctx.JSON(http.StatusOK, GmPasswordFormatError)
// 		return
// 	}
// 	err = c.s.ChangeGmAccountPassword(uint32(uid), req.OldPassword, req.NewPassword)
// 	if err != nil {
// 		switch {
// 		case errors.Is(err, service.GmPasswordError):
// 			ctx.JSON(http.StatusOK, GmOldPasswordError)
// 			return
// 		default:
// 			logger.Error("change account password error: %v", err)
// 			ctx.JSON(http.StatusOK, UnknownError)
// 			return
// 		}
// 	}
// 	ctx.JSON(http.StatusOK, Ok)
// }

// // 退出登录
// func (c *Controller) gmAccountLogout(ctx *gin.Context) {
// 	uid := ctx.GetUint64("uid")
// 	if uid == 0 {
// 		logger.Error("uid not exist")
// 		ctx.JSON(http.StatusOK, UnknownError)
// 		return
// 	}
// 	token := ctx.GetString("token")
// 	err := c.s.GmAccountLogout(uint32(uid), token)
// 	if err != nil {
// 		logger.Error("account logout error: %v", err)
// 		ctx.JSON(http.StatusOK, UnknownError)
// 		return
// 	}
// 	ctx.JSON(http.StatusOK, Ok)
// }
